"""
1. 多态： 不同的 子类对象 调用相同的 父类方法， 产生不同的执行结果（多种形态）
2. 注意：
    - Python是弱类型语言(动态语言)， 在代码中多态体现不够明显，因为看不到非多态的情况
    - 在自动化测试脚本几乎应用不到， 了解多态即可

需求：
1. 在 Dog 类中封装方法 game
    – 普通狗只是简单的玩耍
2. 定义 XiaoTianDog 继承自 Dog， 并且重写 game 方法
    – 哮天犬需要在天上玩耍
3. 定义 Person 类， 并且封装一个 和狗玩 的方法
    – 在方法内部， 直接让 狗对象 调用 game 方法
4. 实例化对象，调用方法，验证结果
"""


class Dog(object):
    def game(self):
        print('普通狗只是简单的玩耍')


class XTD(Dog):
    """继承于Dog"""
    def game(self):
        print('哮天犬在天上玩耍')


class Person(object):
    def play_with_dog(self, temp):
        # self = p, temp = xtq
        print('人在和狗玩耍')
        # 如果是在C++没有多态的时候，不过传入的是dog对象，还是xtq对象
        # 最终调用的game(), 都是Dog的game
        temp.game()

# 实例化Person对象
p = Person()
# 实例化狗对象
dog = Dog()
p.play_with_dog(dog)    # 都是调用play_with_dog(), 普通狗玩耍
xtq = XTD()
p.play_with_dog(xtq)    # 都是调用play_with_dog()，xtq玩耍